%     AERO LOAD - программа для нагружения агрегатов самолета распределенной нагрузкой
%     Copyright (C) 2018-2024  Михаил Козлов
%     Сайт проекта: <http://www.fastenerdoctor.ru/>
%     Адрес электронной почты для связи с разработчиком:
%     <doctor.fastener@gmail.com>
% 
%     Эта программа является свободным программным обеспечением: Вы можете
%     распространять ее и/или изменять, соблюдая условия Универсальной общественной
%     лицензии GNU, опубликованной Фондом свободного программного обеспечения,
%     либо редакции 3, либо (на Ваше усмотрение) любой редакции, выпущенной позже.
% 
%     Эта программа распространяется в надежде на то, что она окажется полезной,
%     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая даже подразумеваемую гарантию ТОВАРНОЙ ПРИГОДНОСТИ,
%     либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Ознакомьтесь с Универсальной общественной
%     лицензией GNU для получения более подробной информации.
% 
%     Вы должны были получить копию Универсальной общественной лицензии GNU
%     вместе с этой программой. Если Вы ее не получили, то перейдите по адресу:
%     <http://www.gnu.org/licenses/>.
% 
%     This program is free software: you can redistribute it and/or modify
%     it under the terms of the GNU General Public License as published by
%     the Free Software Foundation, either version 3 of the License, or
%     (at your option) any later version.
% 
%     This program is distributed in the hope that it will be useful,
%     but WITHOUT ANY WARRANTY; without even the implied warranty of
%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%     GNU General Public License for more details.
% 
%     You should have received a copy of the GNU General Public License
%     along with this program.  If not, see <https://www.gnu.org/licenses/>.

function Check_Load_Settings(Load, Settings_Source)

global ErrCode;

global Cross_Product_Vector_zero_tolerance;

switch Load.Basic_Plane.Definition
    case {'POINT_NORMAL', 'THREE_POINTS'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
            fprintf (1, 'Недопустимое значение параметра Basic_Plane_Definition !\n');
        else
            fprintf (1, 'Недопустимое значение параметра BASIC_PLANE_DEFINITION в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: POINT_NORMAL, THREE_POINTS\n');
        ErrCode = -1;
        return;
end

if (~isequal(size(Load.Basic_Plane.Z0), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимая размерность переменной Z0 !\n');
    else
        fprintf (1, 'Недопустимая размерность переменной Z0 в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (~isequal(size(Load.Basic_Plane.Z1), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимая размерность переменной Z1 !\n');
    else
        fprintf (1, 'Недопустимая размерность переменной Z1 в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (~isequal(size(Load.Basic_Plane.D1), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимая размерность переменной D1 !\n');
    else
        fprintf (1, 'Недопустимая размерность переменной D1 в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (~isequal(size(Load.Basic_Plane.D2), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимая размерность переменной D2 !\n');
    else
        fprintf (1, 'Недопустимая размерность переменной D2 в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (~isequal(size(Load.Basic_Plane.D3), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимая размерность переменной D3 !\n');
    else
        fprintf (1, 'Недопустимая размерность переменной D3 в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (~isequal(size(Load.Chord_Surface.A1), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимая размерность переменной A1 !\n');
    else
        fprintf (1, 'Недопустимая размерность переменной A1 в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (~isequal(size(Load.Chord_Surface.A2), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимая размерность переменной A2 !\n');
    else
        fprintf (1, 'Недопустимая размерность переменной A2 в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (~isequal(size(Load.Chord_Surface.A3), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимая размерность переменной A3 !\n');
    else
        fprintf (1, 'Недопустимая размерность переменной A3 в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (~isequal(size(Load.Chord_Surface.A4), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимая размерность переменной A4 !\n');
    else
        fprintf (1, 'Недопустимая размерность переменной A4 в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (Load.Pn == 0)
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимое значение параметра P !\n');
    else
        fprintf (1, 'Недопустимое значение параметра P в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

switch Load.Span_Load.Law
    case {'TRAPEZOID', 'CHORD_PROPORTIONAL', 'LOAD_DIAGRAM'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
            fprintf (1, 'Недопустимое значение параметра Span_Load_Law !\n');
        else
            fprintf (1, 'Недопустимое значение параметра SPAN_LOAD_LAW в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: TRAPEZOID, CHORD_PROPORTIONAL, LOAD_DIAGRAM\n');
        ErrCode = -1;
        return;
end

switch Load.Span_Load.Trapezoid_Zd_Type
    case {'PARAMETER', 'LOCATION'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
            fprintf (1, 'Недопустимое значение параметра Span_Trapezoid_Zd_Type !\n');
        else
            fprintf (1, 'Недопустимое значение параметра SPAN_TRAPEZOID_ZD_TYPE в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: PARAMETER, LOCATION\n');
        ErrCode = -1;
        return;
end

if (~isequal(size(Load.Span_Load.Trapezoid_Zd_Location), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимая размерность переменной Span_Trapezoid_Zd_Location !\n');
    else
        fprintf (1, 'Недопустимая размерность переменной SPAN_TRAPEZOID_ZD_LOCATION в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

switch Load.Chord_Pressure.Law
    case {'TRAPEZOID', 'USER_MODEL', ...
            'MODEL_1', 'MODEL_2', 'MODEL_3', 'MODEL_4', 'MODEL_5', ...
            'MODEL_6', 'MODEL_7', 'MODEL_8', 'MODEL_9', 'MODEL_10', ...
            'MODEL_11', 'MODEL_12', 'MODEL_13', 'MODEL_14', 'MODEL_15'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
            fprintf (1, 'Недопустимое значение параметра Chord_Pressure_Law !\n');
        else
            fprintf (1, 'Недопустимое значение параметра CHORD_PRESSURE_LAW в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: TRAPEZOID, MODEL_X (где X - число от 1 до 15), USER_MODEL\n');
        ErrCode = -1;
        return;
end

switch Load.Chord_Pressure.Trapezoid_Xd_Type
    case {'PARAMETER', 'LOCATION', 'DISTRIBUTION'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
            fprintf (1, 'Недопустимое значение параметра Chord_Trapezoid_Xd_Type !\n');
        else
            fprintf (1, 'Недопустимое значение параметра CHORD_TRAPEZOID_XD_TYPE в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: PARAMETER, LOCATION, DISTRIBUTION\n');
        ErrCode = -1;
        return;
end

if (~isequal(size(Load.Chord_Pressure.Trapezoid_Xd_Location), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
        fprintf (1, 'Недопустимая размерность переменной Chord_Trapezoid_Xd_Location !\n');
    else
        fprintf (1, 'Недопустимая размерность переменной CHORD_TRAPEZOID_XD_LOCATION в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

switch Load.Chord_Pressure.Model_X_p2_p1_Type
    case {'CONSTANT', 'DISTRIBUTION'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
            fprintf (1, 'Недопустимое значение параметра Chord_Model_X_p2_p1_Type !\n');
        else
            fprintf (1, 'Недопустимое значение параметра CHORD_MODEL_X_P2_P1_TYPE в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, DISTRIBUTION\n');
        ErrCode = -1;
        return;
end

switch Load.Chord_Pressure.Model_X_p3_p1_Type
    case {'CONSTANT', 'DISTRIBUTION'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
            fprintf (1, 'Недопустимое значение параметра Chord_Model_X_p3_p1_Type !\n');
        else
            fprintf (1, 'Недопустимое значение параметра CHORD_MODEL_X_P3_P1_TYPE в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, DISTRIBUTION\n');
        ErrCode = -1;
        return;
end

switch Load.Chord_Pressure.Model_X_p4_p1_Type
    case {'CONSTANT', 'DISTRIBUTION'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
            fprintf (1, 'Недопустимое значение параметра Chord_Model_X_p4_p1_Type !\n');
        else
            fprintf (1, 'Недопустимое значение параметра CHORD_MODEL_X_P4_P1_TYPE в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, DISTRIBUTION\n');
        ErrCode = -1;
        return;
end

switch Load.Chord_Pressure.Model_X_f_Type
    case {'CONSTANT', 'DISTRIBUTION'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Chord_Model_X_f_Type !\n');
        else
             fprintf (1, 'Недопустимое значение параметра CHORD_MODEL_X_F_TYPE в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, DISTRIBUTION\n');
        ErrCode = -1;
        return;
end

switch Load.Chord_Pressure.Model_X_f1_Type
    case {'CONSTANT', 'DISTRIBUTION'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Chord_Model_X_f1_Type !\n');
        else
             fprintf (1, 'Недопустимое значение параметра CHORD_MODEL_X_F1_TYPE в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, DISTRIBUTION\n');
        ErrCode = -1;
        return;
end

switch Load.Chord_Pressure.Model_X_f2_Type
    case {'CONSTANT', 'DISTRIBUTION'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Chord_Model_X_f2_Type !\n');
        else
             fprintf (1, 'Недопустимое значение параметра CHORD_MODEL_X_F2_TYPE в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, DISTRIBUTION\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Span_Load_0
    case {'CONSTANT', 'LINEAR', 'ZERO_VALUE'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Span_Load_Extrap_0 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра SPAN_LOAD_EXTRAP_0 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR, ZERO_VALUE\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Span_Load_1
    case {'CONSTANT', 'LINEAR', 'ZERO_VALUE'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Span_Load_Extrap_1 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра SPAN_LOAD_EXTRAP_1 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR, ZERO_VALUE\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Chord_Pressure_0
    case {'CONSTANT', 'LINEAR', 'ZERO_VALUE'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Chord_Pressure_Extrap_0 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра CHORD_PRESSURE_EXTRAP_0 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR, ZERO_VALUE\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Chord_Pressure_1
    case {'CONSTANT', 'LINEAR', 'ZERO_VALUE'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Chord_Pressure_Extrap_1 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра CHORD_PRESSURE_EXTRAP_1 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR, ZERO_VALUE\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.User_Model_0
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра User_Model_Extrap_0 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра USER_MODEL_EXTRAP_0 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.User_Model_1
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра User_Model_Extrap_1 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра USER_MODEL_EXTRAP_1 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Trapezoid_Xd_0
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Trapezoid_Xd_Extrap_0 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра TRAPEZOID_XD_EXTRAP_0 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Trapezoid_Xd_1
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Trapezoid_Xd_Extrap_1 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра TRAPEZOID_XD_EXTRAP_1 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_p2_p1_0
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_p2_p1_Extrap_0 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_P2_P1_EXTRAP_0 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_p2_p1_1
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_p2_p1_Extrap_1 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_P2_P1_EXTRAP_1 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_p3_p1_0
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_p3_p1_Extrap_0 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_P3_P1_EXTRAP_0 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_p3_p1_1
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_p3_p1_Extrap_1 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_P3_P1_EXTRAP_1 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_p4_p1_0
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_p4_p1_Extrap_0 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_P4_P1_EXTRAP_0 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_p4_p1_1
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_p4_p1_Extrap_1 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_P4_P1_EXTRAP_1 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_f_0
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_f_Extrap_0 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_F_EXTRAP_0 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_f_1
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_f_Extrap_1 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_F_EXTRAP_1 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_f1_0
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_f1_Extrap_0 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_F1_EXTRAP_0 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_f1_1
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_f1_Extrap_1 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_F1_EXTRAP_1 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_f2_0
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_f2_Extrap_0 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_F2_EXTRAP_0 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

switch Load.Extrapolation.Model_X_f2_1
    case {'CONSTANT', 'LINEAR'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Model_X_f2_Extrap_1 !\n');
        else
             fprintf (1, 'Недопустимое значение параметра MODEL_X_F2_EXTRAP_1 в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CONSTANT, LINEAR\n');
        ErrCode = -1;
        return;
end

if (~isequal(size(Load.Summation_Point), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
         fprintf (1, 'Недопустимая размерность переменной Summation_Point !\n');
    else
         fprintf (1, 'Недопустимая размерность переменной SUMMATION_POINT в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (~isequal(size(Load.Coord_Origin), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
         fprintf (1, 'Недопустимая размерность переменной Coord_Origin !\n');
    else
         fprintf (1, 'Недопустимая размерность переменной COORD_ORIGIN в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (~isequal(size(Load.Point_On_Axis_3), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
         fprintf (1, 'Недопустимая размерность переменной Point_On_Axis_3 !\n');
    else
         fprintf (1, 'Недопустимая размерность переменной POINT_ON_AXIS_3 в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (~isequal(size(Load.Point_On_Plane_13), [3,1]))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
         fprintf (1, 'Недопустимая размерность переменной Point_On_Plane_13 !\n');
    else
         fprintf (1, 'Недопустимая размерность переменной POINT_ON_PLANE_13 в конфигурационном файле!\n');
    end
    ErrCode = -1;
    return;
end

if (Load.Correction_Coefficient == 0)
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
         fprintf (1, 'Недопустимое значение параметра Correction_Coefficient !\n');
    else
         fprintf (1, 'Недопустимое значение параметра CORRECTION_COEFFICIENT в конфигурационном файле!\n');
    end
    fprintf (1, 'Параметр должен принимать ненулевое значение.\n');
    ErrCode = -1;
    return;
end

switch Load.Distributed_Load_Mode
    case {'CID_DISTR_LOAD', 'PRESSURE'}
        % Допустимые значения
    otherwise
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, 'Недопустимое значение параметра Distributed_Load_Mode !\n');
        else
             fprintf (1, 'Недопустимое значение параметра Distributed_Load_Mode в конфигурационном файле!\n');
        end
        fprintf (1, 'Разрешенные значения: CID_DISTR_LOAD, PRESSURE\n');
        ErrCode = -1;
        return;
end

if (~((Load.Vector_Field_Component == 1) || (Load.Vector_Field_Component == 2) || (Load.Vector_Field_Component == 3)))
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
         fprintf (1, 'Недопустимое значение параметра Vector_Field_Component !\n');
    else
         fprintf (1, 'Недопустимое значение параметра VECTOR_FIELD_COMPONENT в конфигурационном файле!\n');
    end
    fprintf (1, 'Допустимые значения: 1, 2, 3\n');
    ErrCode = -1;
    return;
end

if (numel(Load.Field_Name) > 31)
    if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
         fprintf (1, 'Недопустимое значение параметра Field_Name !\n');
    else
         fprintf (1, 'Недопустимое значение параметра FIELD_NAME в конфигурационном файле!\n');
    end
    fprintf (1, 'Длина строки с названием поля в Patran не может превышать 31 символа.\n');
    ErrCode = -1;
    return;
end

% Проверка возможности построения системы координат для суммирования нагрузок
Point_1 = Load.Coord_Origin;
Point_2 = Load.Point_On_Axis_3;
Point_3 = Load.Point_On_Plane_13;

if (Equiv_Check_Cube(Point_1, Point_2) || Equiv_Check_Cube(Point_2, Point_3) || Equiv_Check_Cube(Point_1, Point_3))
    fprintf (1, '\nОшибка: среди точек для построения системы координат для суммирования нагрузок обнаружены совпадающие точки!\n');
    ErrCode = -1;
    return;
end

if (norm(cross((Point_2 - Point_1)/norm(Point_2 - Point_1), (Point_3 - Point_1)/norm(Point_3 - Point_1))) < Cross_Product_Vector_zero_tolerance)
    fprintf (1, '\nОшибка: точки для построения системы координат для суммирования нагрузок лежат на одной прямой!\n');
    ErrCode = -1;
    return;
end

% Проверка точек D1, D2, D3
if (Equiv_Check_Cube(Load.Basic_Plane.D1, Load.Basic_Plane.D2))
    fprintf (1, '\nОшибка: точки D1 и D2 совпадают!\n');
    ErrCode = -1;
    return;
end

if (Equiv_Check_Cube(Load.Basic_Plane.D1, Load.Basic_Plane.D3))
    fprintf (1, '\nОшибка: точки D1 и D3 совпадают!\n');
    ErrCode = -1;
    return;
end

if (Equiv_Check_Cube(Load.Basic_Plane.D2, Load.Basic_Plane.D3))
    fprintf (1, '\nОшибка: точки D2 и D3 совпадают!\n');
    ErrCode = -1;
    return;
end

Point_1 = Load.Basic_Plane.D1;
Point_2 = Load.Basic_Plane.D2;
Point_3 = Load.Basic_Plane.D3;

if (norm(cross((Point_2 - Point_1)/norm(Point_2 - Point_1), (Point_3 - Point_1)/norm(Point_3 - Point_1))) < Cross_Product_Vector_zero_tolerance)
    fprintf (1, '\nОшибка: точки D1, D2, D3 лежат на одной прямой!\n');
    ErrCode = -1;
    return;
end

% Проверка точек Z0, Z1
if (Equiv_Check_Cube(Load.Basic_Plane.Z0, Load.Basic_Plane.Z1))
    fprintf (1, '\nОшибка: точки Z0 и Z1 совпадают!\n');
    ErrCode = -1;
    return;
end

% Проверка точек A1, A2, A3, A4
if (Equiv_Check_Cube(Load.Chord_Surface.A1, Load.Chord_Surface.A2))
    fprintf (1, '\nОшибка: точки A1 и A2 совпадают!\n');
    ErrCode = -1;
    return;
end

if (Equiv_Check_Cube(Load.Chord_Surface.A1, Load.Chord_Surface.A3))
    fprintf (1, '\nОшибка: точки A1 и A3 совпадают!\n');
    ErrCode = -1;
    return;
end

if (Equiv_Check_Cube(Load.Chord_Surface.A1, Load.Chord_Surface.A4))
    fprintf (1, '\nОшибка: точки A1 и A4 совпадают!\n');
    ErrCode = -1;
    return;
end

if (Equiv_Check_Cube(Load.Chord_Surface.A2, Load.Chord_Surface.A3))
    fprintf (1, '\nОшибка: точки A2 и A3 совпадают!\n');
    ErrCode = -1;
    return;
end

if (Equiv_Check_Cube(Load.Chord_Surface.A2, Load.Chord_Surface.A4))
    fprintf (1, '\nОшибка: точки A2 и A4 совпадают!\n');
    ErrCode = -1;
    return;
end

if (Equiv_Check_Cube(Load.Chord_Surface.A3, Load.Chord_Surface.A4))
    fprintf (1, '\nОшибка: точки A3 и A4 совпадают!\n');
    ErrCode = -1;
    return;
end

Point_1 = Load.Chord_Surface.A1;
Point_2 = Load.Chord_Surface.A2;
Point_3 = Load.Chord_Surface.A3;

if (norm(cross((Point_2 - Point_1)/norm(Point_2 - Point_1), (Point_3 - Point_1)/norm(Point_3 - Point_1))) < Cross_Product_Vector_zero_tolerance)
    fprintf (1, '\nОшибка: точки A1, A2 и A3 лежат на одной прямой!\n');
    ErrCode = -1;
    return;
end

Point_1 = Load.Chord_Surface.A2;
Point_2 = Load.Chord_Surface.A3;
Point_3 = Load.Chord_Surface.A4;

if (norm(cross((Point_2 - Point_1)/norm(Point_2 - Point_1), (Point_3 - Point_1)/norm(Point_3 - Point_1))) < Cross_Product_Vector_zero_tolerance)
    fprintf (1, '\nОшибка: точки A2, A3 и A4 лежат на одной прямой!\n');
    ErrCode = -1;
    return;
end

Point_1 = Load.Chord_Surface.A3;
Point_2 = Load.Chord_Surface.A4;
Point_3 = Load.Chord_Surface.A1;

if (norm(cross((Point_2 - Point_1)/norm(Point_2 - Point_1), (Point_3 - Point_1)/norm(Point_3 - Point_1))) < Cross_Product_Vector_zero_tolerance)
    fprintf (1, '\nОшибка: точки A1, A3 и A4 лежат на одной прямой!\n');
    ErrCode = -1;
    return;
end

Point_1 = Load.Chord_Surface.A4;
Point_2 = Load.Chord_Surface.A1;
Point_3 = Load.Chord_Surface.A2;

if (norm(cross((Point_2 - Point_1)/norm(Point_2 - Point_1), (Point_3 - Point_1)/norm(Point_3 - Point_1))) < Cross_Product_Vector_zero_tolerance)
    fprintf (1, '\nОшибка: точки A1, A2 и A4 лежат на одной прямой!\n');
    ErrCode = -1;
    return;
end
